dd6dd7cac76803141cb879f52b80729da4219435,src/org/jgroups/stack/GossipRouter.java,ConnectionHandler,readLoop,#,634

Before Change


                    ConcurrentMap<Address,ConnectionHandler> map;

                    if(log.isTraceEnabled())
                        log.trace("Received " + request + " on socket " + sock);
                    
                    switch(command) {

After Change


                Address addr;
                String group;
                try {                   
                    request=new GossipData();
                    request.readFrom(input);
                    byte command=request.getType();
                    addr=request.getAddress();
                    group=request.getGroup();
                    known_groups.add(group);
                    ConcurrentMap<Address,ConnectionHandler> map;

                    if(log.isTraceEnabled())
                        log.trace(this + " received " + request);
                    
                    switch(command) {

                        case GossipRouter.CONNECT:
                            handleConnect(request, addr, group);
                            break;

                        case GossipRouter.PING:
                            // do nothing here - client doesn't expect response data
                            break;

                        case GossipRouter.MESSAGE:
                            if(request.buffer == null || request.buffer.length == 0) {
                                if(log.isWarnEnabled())
                                    log.warn(this +" received null message");
                                break;
                            }

                            try {
                                route(addr, request.getGroup(), request.getBuffer());
                            }
                            catch(Exception e) {
                                if(log.isErrorEnabled())
                                    log.error(this +" failed in routing request to " + addr, e);
                            }
                            break;

                        case GossipRouter.GOSSIP_GET:
                            Set<PhysicalAddress> physical_addrs;
                            List<PingData> mbrs=new ArrayList<PingData>();
                            map=routingTable.get(group);
                            if(map != null) {
                                for(Address logical_addr: map.keySet()) {
                                    physical_addrs=address_mappings.get(logical_addr);
                                    PingData rsp=new PingData(logical_addr, null, true, UUID.get(logical_addr),
                                                              physical_addrs != null? new ArrayList<PhysicalAddress>(physical_addrs) : null);
                                    mbrs.add(rsp);
                                }
                            }
                            output.writeShort(mbrs.size());
                            for(PingData data: mbrs)
                                data.writeTo(output);
                            output.flush();
                            if(log.isDebugEnabled())
                                log.debug(this + " responded to GOSSIP_GET with " + mbrs);
                            break;

                        case GossipRouter.DISCONNECT:
                            try {
                                removeEntry(group, addr);
                                sendData(new GossipData(DISCONNECT_OK));
                                if(log.isDebugEnabled())
                                    log.debug(this + " disconnect completed");
                            }
                            catch(Exception e) {
                                sendData(new GossipData(OP_FAIL));
                            }
                            break;
                            
                        case GossipRouter.CLOSE:
                            close();
                            break;
                            
                        case -1: // EOF
                            notifyAbnormalConnectionTear(this, new EOFException("Connection broken"));
                            break;
                    }
                    if(log.isTraceEnabled())
                        log.trace(this + " processed  " + request);
                }
                catch(SocketTimeoutException ste) {
                }